package com.sangeng.expression;

import com.sangeng.domain.LoginUser;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Component;

import java.util.List;

/**
 * @author LENOVO
 * @version 1.0
 * @date 2025/6/21 12:50
 * @deprecated 自定义权限控制
 */
@Component("ex")//取名可以在调用此bean时使用@PreAuthorize("@ex.hasAuthority('system:dept:test')")实现自定义的权限控制
//在SPEL表达式中使用 @ex相当于获取容器中bean的名字未ex的对象。然后再调用这个对象的hasAuthority方法
public class SGExpressionRoot {

    /**
     * 检查用户是否具有指定的权限
     *
     * @param authority 需要检查的权限字符串
     * @return 如果用户具有指定的权限，则返回true；否则返回false
     */
    public boolean hasAuthority(String authority) {
        //获取当前用户的权限(这里从SecurityContextHolder拿集合可以看自定义的filter过滤器代码,在后面我们把LoginUser封装进了SecurityContextHolder中)
        Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
        LoginUser loginUser = (LoginUser) authentication.getPrincipal();
        List<String> permissions = loginUser.getPermissions();
        //判断用户权限集合中是否存在authority
        return permissions.contains(authority);
    }


}